﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Globalization;
using System.Text.RegularExpressions;
using System.Web.Mail;
using System.Net.Mail;
using System.Net;

namespace WebBanThuoc.Function
{
    public class Func
    {
        /// <summary>
        /// Chuyển từ dạng chuổi sang ngày tháng
        /// </summary>
        /// <param name="data">dữ liệu có dạng dd/MM/yyyy</param>
        /// <returns></returns>
        public static DateTime convertDateTimeToString(string data) 
        {
            DateTime result = DateTime.MinValue;
            if (data.Trim() != "")
            {
                try
                {
                    string[] list = data.Split('/');
                    if (list.Length >= 3)
                    {
                        result = new DateTime(int.Parse(list[2]), int.Parse(list[1]), int.Parse(list[0]));
                    }
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                finally
                {
                    
                }
            }

            return result;
        }

        /// <summary>
        /// chuyển từ string qua kiểu dữ liệu double
        /// </summary>
        /// <param name="data">dữ liệu có dáng 21.000.000,11</param>
        /// <returns></returns>
        public static double convertDoubleToString(string data)
        {
            double result = 0;
            if (data == null)
            {

            }
            else if (data.Trim() == "")
            {

            }
            else
            {
                data = data.Replace(".", "").Replace(",", CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator);
                result = double.Parse(data);
            }            
            return result;
        }


        /// <summary>
        /// Kiểm tra coi có phải là loại file hình ảnh không
        /// </summary>
        /// <param name="fileType">truyền vào ContentType dạng "image/jpeg"</param>
        /// <returns></returns>
        public static bool isFileImage(string fileType)
        {
            bool result = false;
            string[] listFileType = { "image/png", "image/bmp", "image/jpeg", "image/gif" };
            fileType = fileType.Trim();
            foreach (string obj in listFileType)
            {
                if (fileType == obj)
                {
                    result = true;
                    break;
                }
            }

            return result;
        }

        /// <summary>
        /// Lấy tên đuôi file ảnh
        /// </summary>
        /// <param name="fileType">truyền vào ContentType dạng "image/jpeg"</param>
        /// <returns></returns>
        public static string getFileTypeImage(string fileType)
        {
            string result = "";
            string[] listFileType = { "image/png", "image/bmp", "image/jpeg", "image/gif" };
            string[] listType = { "png", "bmp", "jpg", "gif" };
            fileType = fileType.Trim();
            for (int i = 0; i < listFileType.Length; i++)
            {
                if (fileType == listFileType[i])
                {
                    result = listType[i];
                    break;
                }
            }

            return result;
        }        

        /// <summary>
        /// Kiểm tra email truyền vào có đúng định dạng không
        /// </summary>
        /// <param name="emailAdress"></param>
        /// <returns></returns>
        public static bool CheckFormatEmailAdress(string emailAdress)
        {
            try
            {
                Regex regex = new Regex(@"^([\w\.\-]+)@([\w\-]+)((\.(\w){2,5})+)$");
                return regex.IsMatch(emailAdress);
            }
            catch (Exception ex)
            {
                return false;
            }
        }

        /// <summary>
        /// Hàm dùng để chuyển đổi, kiểm tra dữ liệu có hợp lệ hay không
        /// </summary>
        /// <param name="data"></param>
        /// <param name="pType"></param>
        /// <returns></returns>
        public static string beginConvertDataType(string data, pDataType pType)
        {
            string result = data;

            switch (pType)
            {
                case pDataType.String:
                    if (data == null)
                        result = "";
                    break;
                case pDataType.Integer:
                    if (data == null || data.Trim() == "")
                        result = "0";
                    break;
                case pDataType.Decime:
                    if (data == null || data.Trim() == "")
                        result = "0";
                    else
                        result = data.Trim().Replace(".", System.Globalization.CultureInfo.CurrentCulture.NumberFormat.CurrencyDecimalSeparator);
                    break;

                case pDataType.Boolean:
                    if (data == null || data.Trim() == "")
                        result = "false";
                    break;
                case pDataType.DateTime:
                    if (data == null || data.Trim() == "")
                        result = DateTime.Now.ToShortDateString();
                    break;
                case pDataType.CreditCardNo:
                    if (data == null || data.Trim() == "")
                        result = "0";
                    else
                        result = data.Trim().Replace(".", "").Replace(",", "");
                    break;
                default:
                    result = "";
                    break;
            }


            return result;
        }


        /// <summary>
        /// Lấy DateTime min for SmallDateTime in MS SQL Server
        /// </summary>
        /// <returns></returns>
        public static DateTime MinValue_SmallDatetime()
        {
            return new DateTime(1900, 01, 01, 00, 00, 00);
        }

        /// <summary>
        /// trả về Time (hh:MM:ss) tối đa trong ngày là 23:59:59
        /// </summary>
        /// <param name="data">Thời gian cần lấy max Time</param>
        /// <returns></returns>
        public static DateTime getMaxTimeInDateTime(DateTime data)
        {
            DateTime temp = new DateTime(data.Year, data.Month, data.Day, 23, 59, 59);
            //data.AddSeconds(59 - data.Second);
            //data.AddMinutes(59 - data.Minute);
            //data.AddHours(23 - data.Hour);            

            return temp;
        }


        /// <summary>
        /// trả về Time (hh:MM:ss) nhỏ nhất trong ngày là 00:00:01
        /// </summary>
        /// <param name="data">Thời gian cần lấy min Time</param>
        /// <returns></returns>
        public static DateTime getMinTimeInDateTime(DateTime data)
        {
            DateTime temp = new DateTime(data.Year, data.Month, data.Day, 00, 00, 00);
            //data.AddSeconds(-data.Second + 1);
            //data.AddMinutes(- data.Minute);
            //data.AddHours(-data.Hour);

            return temp;
        }

        public bool sendMailOld(string to, string cc, string bcc, string subject, string body)
        {
            try
            {

                SmtpMail.SmtpServer = "";
                System.Web.Mail.MailMessage mail = new System.Web.Mail.MailMessage();
                mail.From = "";
                mail.Cc = cc;
                mail.To = to;
                mail.Bcc = bcc;
                mail.Subject = subject;
                mail.Body = body;
                SmtpMail.Send(mail);
                return true;
            }
            catch
            {
                return false;
            }
        }

        public bool sendMailNew_One(string to, List<string> cc, List<string> bcc, string subject, string body)
        {
            try
            {
                string mailF = System.Configuration.ConfigurationManager.AppSettings["mailD"];
                string pss = System.Configuration.ConfigurationManager.AppSettings["passMailD"];
                string host = System.Configuration.ConfigurationManager.AppSettings["hostMail"];
                string port = System.Configuration.ConfigurationManager.AppSettings["portMail"].Trim();

                System.Net.Mail.MailMessage mailObj = new System.Net.Mail.MailMessage(mailF, to, subject, body);

                //foreach (string ob in to)
                //{
                //    if (ob.Trim() != "" && CheckFormatEmailAdress(ob))
                //        mailObj.To.Add(ob);
                //}

                foreach(string ob in cc){
                    if (ob.Trim() != "" && CheckFormatEmailAdress(ob))
                        mailObj.CC.Add(new MailAddress(ob));
                }

                foreach (string ob in bcc)
                {
                    if (ob.Trim() != "" && CheckFormatEmailAdress(ob))
                        mailObj.Bcc.Add(new MailAddress(ob));
                }
                mailObj.IsBodyHtml = true;
                                
                SmtpClient SMTPServer = new SmtpClient(host);
                if (port.Trim() != "")
                {
                    SMTPServer.Port = Convert.ToInt32(port);
                }
                SMTPServer.Host = "smtp.gmail.com";
                SMTPServer.Credentials = new NetworkCredential(mailF, pss);
                SMTPServer.DeliveryMethod = SmtpDeliveryMethod.Network;
                SMTPServer.EnableSsl = true;
                SMTPServer.Send(mailObj);
                return true;
            }
            catch
            {
                return false;
            }
        }

        public bool sendMailNew_Many(string to, List<string> cc, List<string> bcc, string subject, string body)
        {
            try
            {
                string mailF = System.Configuration.ConfigurationManager.AppSettings["mailD"];
                string pss = System.Configuration.ConfigurationManager.AppSettings["passMailD"];
                string host = System.Configuration.ConfigurationManager.AppSettings["hostMail"];
                string port = System.Configuration.ConfigurationManager.AppSettings["portMail"].Trim();

                System.Net.Mail.MailMessage mailObj = new System.Net.Mail.MailMessage(mailF, mailF, subject, body);

                //foreach (string ob in to)
                //{
                //    if (ob.Trim() != "" && CheckFormatEmailAdress(ob))
                //        mailObj.To.Add(ob);
                //}

                foreach (string ob in cc)
                {
                    if (ob.Trim() != "" && CheckFormatEmailAdress(ob))
                        mailObj.CC.Add(new MailAddress(ob));
                }

                foreach (string ob in bcc)
                {
                    if (ob.Trim() != "" && CheckFormatEmailAdress(ob))
                        mailObj.Bcc.Add(new MailAddress(ob));
                }
                mailObj.IsBodyHtml = true;

                SmtpClient SMTPServer = new SmtpClient(host);
                if (port.Trim() != "")
                {
                    SMTPServer.Port = Convert.ToInt32(port);
                }
                SMTPServer.Host = "smtp.gmail.com";
                SMTPServer.Credentials = new NetworkCredential(mailF, pss);
                SMTPServer.DeliveryMethod = SmtpDeliveryMethod.Network;
                SMTPServer.EnableSsl = true;
                SMTPServer.Send(mailObj);
                return true;
            }
            catch
            {
                return false;
            }
        }
    }
}